home *** CD-ROM | disk | FTP | other *** search
- Programmer's Guide to Selectric™ V1.02
- --------------------------------------
-
- Juli 1992
-
- (c) 1992 by Oliver Scheel
-
- ... this guide (however) goes Freaky Deaky!
-
-
- Einleitung
- ----------
- Ja, auch für Selectric™ gibt's einen Programmer's Guide, der jedoch
- zur Zeit noch nicht so umfangreich ist. Es ist mehr geplant als bis
- jetzt verwirklicht wurde, z.B. wird man Selectric™ irgendwann auch
- ein sog. virtuelles Verzeichnis übergeben können, aus dem dann Da-
- teien oder Objekte ausgewählen kann. Ich will jetzt aber nicht zuviel
- verraten.
- Der ganze Kram mit der Programmierschnittstelle ist übrigens auf
- meinem Mist gewachsen. Anfragen sind daher am besten an mich zu
- richten.
-
-
- Die Möglichkeiten
- -----------------
- Ich versuche hier mal kurz die Möglichkeiten mit Selectric™ zu
- umreißen, um so einen kleinen Überblick zu verschaffen:
- Selectric™ installiert einen Cookie-Jar über den die Applikation
- Einstellungen vornehmen kann. Das schließt nicht nur die Optionen
- oder die Sortierung ein, sondern auch die Preset-Paths und -Ex-
- tensions. Die Struktur wurde in diesem Fall sehr flexibel gestaltet
- und sieht auf den ersten Blick etwas kompliziert aus. Weiterhin kann
- man sich auch mehr als nur einen Dateinamen zurückgeben lassen. Auch
- dies geschieht über den Cookie-Jar.
-
- Der Cookie-Jar
- --------------
- Selectric™ legt einen sog. `FSEL'-Cookie an. Dieser zeigt an, daß man
- in jedem Fall fsel_exinput() aufrufen kann, auch wenn der neue File-
- Selector abgeschaltet wurde. Der Inhalt `FSEL'-Cookies ist nicht
- festgelegt, bei Selectric™ zeigt er auf die folgende Struktur:
-
- typedef struct
- {
- unsigned long id; /* Selectric ID (`SLCT') */
- unsigned int version; /* version (BCD-Format) */
- struct
- {
- unsigned : 8; /* reserved */
- unsigned pthsav : 1; /* save and restore paths */
- unsigned stdest : 1; /* stay in destination path */
- unsigned autloc : 1; /* auto-locator */
- unsigned numsrt : 1; /* numsort */
- unsigned lower : 1; /* use lowercase letters */
- unsigned dclick : 1; /* open folder on dclick */
- unsigned hidden : 1; /* show hidden files */
- unsigned onoff : 1; /* Selectric™ ON/OFF */
- } config;
- int sort; /* sort-mode (neg. = rev.) */
- int num_ext; /* number of extensions */
- char *(*ext)[]; /* preset extensions */
- int num_paths; /* number of paths */
- char *(*paths)[]; /* preset paths */
- int comm; /* communication word */
- int in_count; /* input counter */
- void *in_ptr; /* input pointer */
- int out_count; /* output counter */
- void *out_ptr; /* output pointer */
- int cdecl (*get_first)(DTA *dta, int attrib);
- int cdecl (*get_next)(DTA *dta);
- int cdecl (*release_dir)(void);
- } SLCT_STR;
-
-
- Fangen wir mal an:
-
- id Das ist die ID von Selectric™, also `SLCT'. Es reicht
- also nicht nur den `FSEL'-Cookie abzfragen, sondern
- muß zusätzlich nich die ID checken.
-
- version Hier steht die Versionsnummer im BCD-Format, also
- 0x0100 für 1.00.
-
- config.
- onoff Über dieses Bit wird Selectric™ ein (logisch 1) bzw.
- ausgeschaltet.
- hidden Zeigt an, ob versteckte Dateien angezeigt werden sol-
- len.
- dclick Ordner erst auf Doppelklick öffnen.
- lower Pfadangaben etc. in der Hauptseite in Kleinbuchstaben
- anzeigen.
- numsrt Schaltet die numerische Sortierung ein.
- autloc Aktiviert den Auto-Locator.
- stdest Nach Kopier/Verschiebe-Aktionen im Zielpfad bleiben.
- pthsav Ist dieses Flag gesetzt, so speichert Selectric™ die
- GEMDOS-Pfade und stellt sie kurz vor Verlassen wieder
- her.
-
- sort Konfiguriert das Sortierkriterium, dabei gelten fol-
- gende Werte:
-
- 1 Sortiert nach dem Namen
- 2 nach Datum
- 3 nach Größe
- 4 nach Typ bzw. Extension
- 5 unsortiert
-
- Ist der Wert negativ, so wird rückwärts sortiert (z.B.
- -3 für `nach Größe' und `rückwärts').
-
- num_ext Dieser Wert gibt die Anzahl der möglichen Preset-
- Extensions an. Wird von der Applikation eine andere
- Anzahl von Extensions übergeben, so muß dieser Wert
- angepaßt werden. Selectric™ V1.0 verarbeitet z.Zt. nur
- 10 Extensions, werden mehr übergeben, so wird der Wert
- von Selectric™ aus auf 10 reduziert.
-
- *(*ext)[] Dieser Zeiger zeigt auf ein Array aus Zeigern auf
- Strings. In diesen Strings stehen die Preset-
- Extensions. Wird der Pointer von der Applikation
- verändert, so muß er auf eine gleichartige Struktur
- zeigen. Der Zeiger (und auch die Anzahl) wird von
- Selectric™ aus wieder zurückgesetzt.
-
- num_paths Gibt die Anzahl der Preset-Paths an (ansonsten siehe
- `num_ext').
-
- *(*paths)[] Das ist für die Preset-Paths da (s.a. `*(*ext)[]').
- Bemerkung: Das übergeben von Pfaden sollte wirklich
- nur dann angewendet werden, wenn dies auch sinnvoll
- erscheint. Weiterhin sollte man diese Pfade auch in
- der Applikation abspeichern können (Selectric™ spei-
- chert nur seine eigenen Extensions/Paths ab, die von
- der Applikation übergebenen können aber trotzdem
- editiert werden!).
-
- comm Dieses Wort wird zur Kommunikation zwischen Selectric™
- und der Applikation benutzt. Es wird nach Verlassen von
- Selectric™ automatisch auf Null zurückgesetzt. Zur Zeit
- wird nur die Richtung Applikation -> Selectric™
- unterstützt. Die einzelnen Bits haben folgende
- Bedeutung:
-
- Bit 0 Das Programm erwartet mehr als einen
- Dateinamen (s.a. *out_ptr). Dabei wird die
- gleiche Struktur wie bei `paths' und `ext'
- erwartet. Ordner werden mit einem Backslash
- am Ende gekennzeichnet.
- Bit 1 Dieses Bit gilt nur in Verbindung mit Bit 0.
- Ist das Bit gesetzt, dann werden die
- Dateinamen durch Leerzeichen als einziger
- String zurückgegeben, fast so wie wenn man
- einem Programm eine Kommandozeile übergeben
- würde. Auch hier sind die Ordner mit einem
- Backslash am Ende gekennzeichnet.
-
- Die anderen Bits sind resrviert und sollten (besser:
- dürfen) nicht verändert bzw. benutzt werden.
-
- in_count z.Zt. unbenutzt
-
- *in_ptr z.Zt. unbenutzt
-
- out_count Die Applikation benutzt es, um anzugeben wieviele Items
- zurückgegeben werden sollen. Selectric™ schreibt kurz
- vor dem Verlassen die tatsächliche Anzahl rein.
-
- *out_ptr Dieser Pointer muß bei Benutzung auf einen
- Speicherbereich bzw. Struktur, welche innerhalb der
- Applikation alloziert wurde, zeigen. Wichtig ist dabei,
- daß genügend Speicher alloziert wurde!
-
-
- Seit Version 1.02 gibt es auch noch drei neue Funktionen, mit denen
- man noch auf eine andere Art und Weise mehrere Dateinamen zu-
- rückbekommen kann. Sie arbeiten nach dem First/Next-Prinzip und haben
- den Vorteil, daß die Hauptapplikation keinen Speicher für die Da-
- teiliste zur Verfügung stellen muß. Sie arbeiten äquivalent zu den
- TOS-Routinen Fsfirst() und Fsnext(), mit dem kleinen Unterschied, daß
- man jeweils einen Zeiger auf eine DTA-Struktur übergeben muß. Ebenso
- kann man bei get_first() keine Dateimuster übergeben, da das ja
- eigentlich der User im Selector macht. Weiterhin muß nach dem Holen
- der Dateinamen release_dir() aufgerufen werden, damit Selectric den
- Speicher wieder freigibt. Die ganze Aktion muß mit wind_update()
- eingeschachtelt werden, da es sonst zu Reentranzproblemen in Selectric
- kommen kann.
-
-
- Bemerkung: Die Struktur ist in den Grundzügen kompatibel zu der
- aus FSELECT 1.2.x von Martin Patzel/Köhling, d.h. ID,
- Versionsnummer und das ON/OFF Bit sind an der gleichen
- Stelle zu finden. Der Rest ist natürlich nur in
- Selectric™ vorhanden.
-
-
- Nach dem Motto `ein Programm sagt mehr als tausend Worte' verweise ich
- an dieser Stelle auf das Beispielprogramm und das Binding.
-
-
- Nachwort
- --------
- Bleibt nur noch zu sagen, daß noch einiges geplant ist, welches in
- späteren Versionen auch verwirklicht wird, jedoch wollten wir das
- nicht `übers Knie brechen'. Aber schon jetzt hat Selectric™ die um-
- fangreichste Programmierschnittstelle in der File-Selektor Welt.
- Ach ja, das Binding und das Sample wurden nicht so intensiv getestet,
- jedoch sollten keine schwerwiegenden Fehler enhalten sein. Für Bug-
- Reports bin ich aber immer sehr dankbar.
-
-
- Meine Adresse ...
-
- Oliver Scheel
- Rothehausstr. 28
- W-5000 Köln 30 (Germany)
-
- MausNet: Oliver Scheel @ K
- InterNet: Oliver_Scheel@k.maus.de
-
-
- It's not a trick, it's Selectric™.
-
-
- ----
- Rächzschreipfäler (c) 1992 by Oliver Scheel
-